package com.java.service;

import com.java.bean.Express;
import com.java.dao.BaseExpressDao;
import com.java.dao.impl.ExpressDaoImpl;
import com.java.util.DuplicateCodeException;
import com.java.util.RandomUtil;
import com.java.util.SMSUtil;

import java.util.List;
import java.util.Map;

public class ExpressService {

    private static BaseExpressDao dao = new ExpressDaoImpl();
    /**
     * 查询数据库中所有的快递,以集合的形式输出
     *
     * @return
     */
    public static List<Map<String, Integer>> console() {
        return dao.console();
    }

    /**
     * 分页查询所有的快递
     *
     * @param limit
     * @param offset
     * @param pageNumber
     * @return
     */
    public static List<Express> findAll(boolean limit, int offset, int pageNumber) {
        return dao.findAll(limit,offset,pageNumber);
    }

    /**
     * 根据快递单号查询所有的快递
     *
     * @param number
     * @return
     */
    public static Express findByNumber(String number) {
        return dao.findByNumber(number);
    }

    /**
     * 根据取件码查询快递
     *
     * @param code
     * @return
     */
    public static Express findByCode(String code) {
        return dao.findByCode(code);
    }

    /**
     * 根据用户手机查询快递
     *
     * @param userPhone
     * @return
     */
    public static List<Express> findByUserPhone(String userPhone) {
        return dao.findByUserPhone(userPhone);
    }

    /**
     * 根据录入人手机查询快递
     *
     * @param sysPhone
     * @return
     */
    public static List<Express> findBySysPhone(String sysPhone) {
        return dao.findBySysPhone(sysPhone);
    }

    /**
     * 快递的录入
     *
     * @param e
     * @return true or false
     */
    public static boolean insert(Express e) {
        //1.    生成了取件码
        e.setCode(RandomUtil.getCode()+"");
        /*try {
            return dao.insert(e);
        } catch (DuplicateCodeException duplicateCodeException) {
            return insert(e);
        }*/
        try {
            boolean flag = dao.insert(e);
            if(flag){
                //录入成功
                SMSUtil.sendSMS(e.getUserPhone(),e.getCode());
            }
            return flag;
        } catch (DuplicateCodeException duplicateCodeException) {
            return insert(e);
        }
    }

    /**
     * 修改快递信息
     *
     * @param id
     * @param newExpress
     * @return
     */
    public static boolean update(int id, Express newExpress) {
        if(newExpress.getUserPhone()!=null){
            dao.delete(id);
            return insert(newExpress);
        }else {
            boolean update = dao.update(id, newExpress);
            Express e = dao.findByNumber(newExpress.getNumber());
            if(newExpress.getStatus() == 1){
                updateStatus(e.getCode());
            }
            return update;
        }
    }

    /**
     * 更改快递的状态
     *
     * @param code
     * @return
     */
    public static boolean updateStatus(String code) {
        return dao.updateStatus(code);
    }

    /**
     * 删除快递信息
     *
     * @param id
     * @return
     */
    public static boolean delete(int id) {
        return dao.delete(id);
    }

    public static List<Express> findByUserPhoneAndStatus(String userPhone, int status) {
        return dao.findByUserPhoneAndStatus(userPhone,status);
    }
}
